﻿#pragma once

#include <string>
#include <map>
#include <memory>
#include <TopoDS_Shape.hxx>

#include "../Data/ModelData.h"


/// @brief OCCT建模类
/// @note 建模类将根据模型数据进行建模，并返回TopoDS_Shape对象
class OCCTModel
{
public:
    static OCCTModel& getInstance();
    
public:
    /// @brief 绘制模型
    TopoDS_Shape DoModel();

public:
    ModelData* m_Data;    // 内存由数据中心管理，建模类无需管理

private:
    OCCTModel();
    ~OCCTModel();
    OCCTModel(const OCCTModel&) = delete;
    OCCTModel& operator=(const OCCTModel&) = delete;

private:
    /// @brief 2D建模接口
    /// @return 2D模型
    TopoDS_Shape DoModel2d();

    /// @brief 3D建模接口
    /// @return 3D模型
    TopoDS_Shape DoModel3d();
};